package com.project.springboot.converters;

import com.github.houbb.opencc4j.util.ZhConverterUtil;
import org.springframework.stereotype.Component;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * description: 简体中文和繁体中文转换器
 * @author 朱正磊
 * @date 2025-06-17 08:12:12
 */
@Component
public class SimplifiedToTraditionalConverter {

    // 指定Freemarker模板目录路径，如果是聚合工程，需要在最前面加上子工程名称，比如xhcp-cms/src/main/resources/templates，
    // 当然了，可以替换freemarker的ftl文件，也就可以替换java文件中的简体中文为繁体中文，比如将路径修改成xhcp-drug/src/main/java，
    // path.toString().endsWith(".ftl")修改成path.toString().endsWith(".java")即可
    private static final String TEMPLATE_DIR = "src/main/resources/templates";

    /**
     * description: 递归转换所有的以.ftl为后缀的文件
     * @author 朱正磊
     * @date 2025-06-17 09:28:23
     */
    public void convertAllTemplates() {
        try (Stream<Path> paths = Files.walk(Paths.get(TEMPLATE_DIR))) {
            List<Path> ftlFiles = paths
                    .filter(Files::isRegularFile)
                    .filter(path -> path.toString().endsWith(".ftl"))
                    .collect(Collectors.toList());

            for (Path file : ftlFiles) {
                convertFile(file);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * description: 将freemarker文件中中文简体转换成中文繁体
     * @author 朱正磊
     * @date 2025-06-17 09:29:10
     * @param file 文件对象
     */
    private void convertFile(Path file) {
        try (BufferedReader reader = Files.newBufferedReader(file, StandardCharsets.UTF_8)) {
            // 读取文件内容
            String content = reader.lines().collect(Collectors.joining(System.lineSeparator()));

            // 使用opencc4j进行简体到台湾繁体的转换
            String convertedContent = ZhConverterUtil.toTraditional(content);

            // 写入输出文件
            try (BufferedWriter writer = Files.newBufferedWriter(file, StandardCharsets.UTF_8)) {
                writer.write(convertedContent);
            }

            System.out.println("已转换: " + file);
        } catch (IOException e) {
            System.err.println("处理文件 " + file + " 时出错: " + e.getMessage());
        }
    }

}
